#Animacije predstavljaju grafički prikaz podataka koji se menja u toku vremena.
#Kreiranje animacije se vrši u nekoliko koraka:
#1. Kreiranje objekta tipa Animation
#2. Čuvanje svakog frejma animacije #može se realizovati na više načina
#3. Konverzija sačuvanih frejmova u gif
using Plots
t = -5:0.05:5; #definišemo podelu ose za koju želimo iscrtavanje - od nje i od brzine frejmova po sekundi
#će zavisiti brzina naše animacije
y = t .^2;
pomeraj = 2; #definišemo pomeraj takav da se svaki novi plot th. frejm razlikuje za ovaj broj tačaka koji treba
#plot-ovati
N = length(t);
anim = @animate for i = 1:pomeraj:N #svaki put iterativno radimo uvećavanje ovog objekta - svaki novi element je frejm!
plot(t[1:i], y[1:i]) #zadužen je makro animate
end
gif(anim, "y = t^2 funkcija.gif", fps = 20) #konačno, koristeći makro gif, kome kao prvi argument prosleđujemo
#našu animaciju, kao drugi kako želimo da je sačuvamo, a kao treći argument
#prosleđujemo brzinu frejmova koji će se prikazivati po sekundi
t = -5:0.05:5;
y = t .^2;
pomeraj = 2;
N = length(t);
anim = @animate for i = 1:pomeraj:N
plot(t[1:i], y[1:i]);
frame(anim); #Ukoliko ne želimo da imamo iscrtavanje u našem okruženju, ali želimo
#sačuvani gif, potrebno je onemogućiti operacije ispisa za plot i gif
#sa operatorom ;, a za čuvanje frejmova u animaciju možemo koristiti
#funkciju frame(), koja kao argument prima animaciju u kojoj želimo
#da sačuvamo trenutni frejm
end
gif(anim, "y = t^2 funkcija - drugi način.gif", fps = 20)
#Animacije nisu ograničene samo na iscrtavanje 2D grafika. Moguće je vršiti i pravljenje animacija za 3D plot-ove,
#heatmap-e, površine ....
t = -2*pi : 0.1: 2*pi;
u = sin.(t);
v = cos.(t);
N = length(u);
k = t;
plt1 = plot3d(
1,
xlim = (-10, 10),
ylim = (-10, 10),
zlim = (-10, 10),
title = "Spirala",
marker = 3,
)
@gif for i=1:N
push!(plt1,u[i], v[i], k[i])
end every 5
#Plotovanje heatmap-a
anim = @animate for i = 1:50
mat = randn(5, 5);
heatmap(mat, c=:cool)
end
gif(anim, "heatmap_primer.gif", fps = 5)
# Teme (Themes)
#Teme predstavljaju opciju koja služi za dodatno ukrašavanje naših grafika.
#One su primenljive na sve vrste plot-ova, te ćemo stoga ovde dati demonstraciju kako se neke od njih koriste.
#Ukoliko ništa sami ne preduzmemo po pitanju definisanje teme, programski jezik Julia ima svoju podrazumevanu temu,
#koju smo do sada svo vreme koristili
#Tema se postavlja pre nego što se vrši bilo kakvo plotovanje rezultata. Ukoliko želimo prvo da koristimo jednu temu,
#a onda potom neku drugu, to postižemo tako što ponovo vršimo definisanje naše teme:
theme(:sand)
t = -5:0.05:5;
y = t .^2;
pomeraj = 2;
N = length(t);
anim = @animate for i = 1:pomeraj:N
plot(t[1:i], y[1:i])
end
gif(anim, "y = t^2 funkcija_sand.gif", fps = 20)
theme(:dark) #redefinišemo temu
#Plotovanje heatmap-a
anim = @animate for i = 1:50
mat = randn(5, 5);
heatmap(mat, c=:cool)
end
gif(anim, "heatmap_primer_dark.gif", fps = 5)
theme(:lime)
t = range(-4*π, 4*π, length = 1000);
plot(2*sin.(t), cos.(t), t,title = "Spirala", lw = 3)
theme(:vibrant)
u = range(-5, 5, length = 1000);
v = range(-5, 5, length = 1000);
f(x, y) = x.^2 + y.^2;
contour(u, v, f, title = "Parabola") #contour je poseban tip crtanja grafika funkcije kod koje se iscrtavanje svodi na 2D ravan
#a crtež će se sastojati od linija koje povezuju tačke sa istim vrednostima funcije